#ifndef _SDLJEU_H
#define _SDLJEU_H
#include <SDL/SDL.h>
#include "de.h"
#include "pion.h"

/**
@brief Cette fonction définit le module sdljeu
@author MARLIER Molly & GUESDON Marine
@version 1.0
@date 2013/06/01
*/

/* Fonction avvec une seul pion */
int sdljeu1(int tours_souhaites) ;

/* Fonction 2 joeurs avec 2 pions */
void sdljeu2(int tours_souhaites) ;

/**
@brief Modifie le porte-monnaie suite à une position sur une case Transaction
@param [in, out] pos_pion :SDL_Rect, [in] pion :Pion, [in,out] transaction : CarteTransaction
@return Porte_Monnaie
*/
Porte_Monnaie sdljeuAffichageMonnaieTransaction (const SDL_Rect pos_pion, Pion pion, const CarteTransaction transaction) ;


/**
@brief Modifie le porte-monnaie suite à une position sur une case Vente
@param [in, out] pos_pion :SDL_Rect, [in] pion :Pion, [in,out] transaction : CarteTransaction
@return Porte_Monnaie
*/
Porte_Monnaie sdljeuAffichageMonnaieVente (SDL_Rect pos_pion, Pion pion, CarteTransaction transaction) ;


/**
@brief Initilaise la position à (70,200) cad case départ
@param none
@return SDL_Rect
*/
SDL_Rect sdljeuInitPosPion () ;


/**
@brief Renvoie la position en x qu'aura le pion sur la prochaine case (+110 ou retour dans la première colonne)
@param [in] pos_pv : SDL_Surface.
@return int.
*/
int sdljeuPosx(SDL_Rect pos_pv) ;


/**
@brief Renvoie la position en y qu'aura le pion sur la prochaine case (+110 ou reste dans la même ligne)
@param [in] pos_pv : SDL_Surface.
@return int.
*/
int sdljeuPosy(SDL_Rect pos_pv) ;


/**
@brief Vérifie si le pion se trouve sur la dernière case du plateau, si c'est le cas, retourne 1 sinon retourne 0
@param [in, out] pos_pv : SDL_Surface.
@return int.
*/
int sdljeuCaseFin (const SDL_Rect pos_pv) ;


/**
@brief Avance le pion du nombre de cases mentionné par le dé, si le pion est sur la case 31, il retourne à la case départ
@param [in] pos_pv : SDL_Surface, [in, out] valeur de : int.
@return SDL_Rect.
*/
SDL_Rect sdljeuAvancerPion(SDL_Rect pos_pion, const int valeur_de) ;


/**
@brief Retourne la nouvelle image du dé, selon sa valeur.
@param [in, out] valeur_de : int, [in] de : SDL_Surface*
@return SDL_Surface*.
*/
SDL_Surface* sdljeuAffichageDe (const int valeur_de, SDL_Surface *de) ;


/**
@brief Modifie la valeur du porte-monnaie en fonction de la case evenement
@param [in, out] pos_pion : SDL_Surface, [in] pion : Pion
@return Porte_Monnaie.
*/
Porte_Monnaie sdljeuAffichageMonnaie (const SDL_Rect pos_pion, Pion pion)  ;


/**
@brief Affiche la carte evenement correspondante à la case sur laquelle se trouve le pion
@param [in, out] pos_pion : SDL_Surface,[in] bandeau :SDL_Surface* [in,out] pion : Pion
@return SDL_Surface*
*/
SDL_Surface* sdljeuAffichageEvenement (const SDL_Rect pos_pion, SDL_Surface* bandeau, const Pion pion) ;


/**
@brief Retourne le courrier correspondant dans bandeau
@param [in, out] courrier : CarteCourrier,[in] bandeau :SDL_Surface*
@return SDL_Surface*
*/
SDL_Surface* sdljeuNumCourrier (const CarteCourrier courrier, SDL_Surface* bandeau) ;


/**
@brief Retourne l'image de la transaction correspondant dans bandeau
@param [in, out] transaction : CarteTransaction,[in] bandeau :SDL_Surface*
@return SDL_Surface*
*/
SDL_Surface* sdljeuNumTransaction (const CarteTransaction transaction, SDL_Surface* bandeau) ;


/**
@brief Modifie la valeur du porte-monnaie en fonction de la carte courrier
@param [in, out] pos_pion : SDL_Rect, [in] pion : Pion, [in,out] courrier : CarteCourrier.
@return Porte_Monnaie
*/
Porte_Monnaie sdljeuAffichageMonnaieCourrier (const SDL_Rect pos_pion, Pion pion, const CarteCourrier courrier) ;


#endif
